//----------------------------------------------------------------------------
// M A R I T I M E  R E S E A R C H  I N S T I T U T E  N E T H E R L A N D S
//----------------------------------------------------------------------------
// Copyright (C) 2008 - MARIN - All rights reserved - http://www.marin.nl
//----------------------------------------------------------------------------
// Program    : mermaid
// Module     : vbm
// File       : SolverFactory.h
//----------------------------------------------------------------------------

#ifndef SOLVERFACTORY_H
#define SOLVERFACTORY_H

#include <string>
#include "defines.h"

class Solver;
template <class T> class Array2D;

/// factory to create solvers based upon their name
class SolverFactory
{
public:

    static Solver *create(const char *name,
                          Array2D<REAL> *pcc,
                          Array2D<REAL> *pcs,
                          Array2D<REAL> *pcw,
                          int Nx1,
                          int Nx2,
                          REAL tolerance);
    
    static std::string getSolvers();

private:

    /// @cond nevercall
    SolverFactory();
    SolverFactory(const SolverFactory& m);
    virtual ~SolverFactory();
    SolverFactory & operator=(const SolverFactory& m);
    /// @endcond

};

#endif // SOLVERFACTORY_H
